package com.rachel.testjetpack;

import android.util.Log;

import androidx.lifecycle.Lifecycle;
import androidx.lifecycle.LifecycleObserver;
import androidx.lifecycle.OnLifecycleEvent;

import com.rachel.testjetpack.viewmodel.Main3ActivityViewModel;

/**
 * Android Jetpack系列之Lifecycle
 * 在Activity 可见的时候，我们去做一个计数功能，每隔一秒 将计数加1 ,当Activity不可见的时候停止计数，当Activity被销毁的时候 将计数置为0
 * 创建一个WorkUtil工具类，然后再activity中的生命周期中分别执行对应的方法
 * 然而 ，这样还是不够解耦，如果方法过多的话 ，会让view中的代码越来越臃肿，那么 还有更好的方案吗?
 * 这就是今天所说的Lifecycle。
 * 我们通过改写WorkUtil类,让WorkUtil类实现LifecycleObserver
 * 通过OnLifecycleEvent注解来注明方法所执行的生命周期
 * 然后在Activity中注册即可：getLifecycle().addObserver(new WorkUtil());
 *
 * 为什么可以在Activity中直接使用getLifecycle().addObserver(new WorkUtil());？
 * 其实使用的是LifecycleOwner.getLifecycle,LifecycleOwner是单一方法接口，表示类具有 Lifecycle,而如果activity继承自AppcompatActivity或Fragment继承自
 * androidx.fragment.app.Fragment他们本身就是一个LifecycleOwner的实例，这是AndroidX库帮我们自动完成的。
 */
public class WorkUtil implements LifecycleObserver {

    private static final String TAG = "WorkUtil";

    private boolean whetherToCount = true;

    private Main3ActivityViewModel main3ActivityViewModel;

    public WorkUtil(Main3ActivityViewModel main3ActivityViewModel) {
        this.main3ActivityViewModel = main3ActivityViewModel;
    }
    @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
    public void start() {
        new Thread(new Runnable() {
            @Override
            public void run() {
                while (whetherToCount) {
                    try {
                        Thread.sleep(1000);
                        main3ActivityViewModel.count++;
                        Log.d(TAG, "start: " + main3ActivityViewModel.count);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }).start();
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_STOP)
    public void onStop() {
        main3ActivityViewModel.count = 100;
        whetherToCount = false;
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
    public void onDestory() {
        main3ActivityViewModel.count = 0;
    }
}